Completed
Push — master ( 1fdd97...eb7e9c )
by Andres
37s
created

nova.js ➔ ... ➔ isBasicUpgradeVisible   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
c 0
b 0
f 0
nc 1
dl 0
loc 3
rs 10
nop 2
1
/**
2
 nova
3
 Component that handles upgrades.
4
5
 @namespace Components
6
 */
7
'use strict';
8
9
angular.module('game').component('nova', {
10
  templateUrl: 'views/nova.html',
11
  controller: ['state', 'visibility', 'upgrade', 'data', nova],
12
  controllerAs: 'ct'
13
});
14
15
function nova(state, visibility, upgrade, data) {
16
  let ct = this;
17
  ct.state = state;
18
  ct.data = data;
19
20
  ct.buyUpgrade = function (name, element) {
21
    let upgrades = state.player.elements[element].upgrades;
22
    let price = data.upgrades[name].price;
23
    let currency = data.elements[element].main;
24
    upgrade.buyUpgrade(state.player,
25
      upgrades,
26
      name,
27
      price,
28
      currency);
29
  };
30
31
  /* Global upgrades are non-resource specific, repeatable upgrades */
32
  ct.buyGlobalUpgrade = function (name) {
33
    if (!ct.canBuyGlobalUpgrade(name)) {
34
      return;
35
    }
36
37
    let up = data.global_upgrades[name];
38
    for (let currency in up.price) {
39
      let value = up.price[currency] * ct.priceMultiplier(name);
40
      state.player.resources[currency].number -= value;
41
    }
42
43
    state.player.global_upgrades[name]++;
44
  };
45
46
  ct.canBuyGlobalUpgrade = function (name) {
47
    let up = data.global_upgrades[name];
48
    for (let currency in up.price) {
49
      let value = up.price[currency] * ct.priceMultiplier(name);
50
      if (state.player.resources[currency].number < value) {
51
        return false;
52
      }
53
    }
54
55
    return true;
56
  };
57
58
  ct.priceMultiplier = function (name) {
59
    let level = state.player.global_upgrades[name];
60
    return Math.ceil(Math.pow(data.global_upgrades[name].price_exp, level));
61
  };
62
63
  ct.visibleUpgrades = function(currentElement, source) {
64
    return visibility.visible(source, createVisibleFunction(source), currentElement);
65
  };
66
67
  function createVisibleFunction(source){
68
    return function isBasicUpgradeVisible(name, currentElement) {
69
      return visibility.isUpgradeVisible(name, currentElement, source[name]);
70
    };
71
  }
72
}
73